home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / Other Langs / Parallaxis_20 / rot.p < prev    next >
Text File  |  1990-05-31  |  2KB  |  69 lines

  1. SYSTEM  image_rotation;
  2.  
  3. CONST   m_size = 4;
  4.  
  5. CONFIGURATION  Pic [m_size],[m_size];
  6. CONNECTION     right :  Pic [i, j]  ->  Pic [i, j+1].left;
  7.                left  :  Pic [i, j]  ->  Pic [i, j-1].right;
  8.                up    :  Pic [i, j]  ->  Pic [i+1, j].down;
  9.                down  :  Pic [i, j]  ->  Pic [i-1, j].up;
  10.  
  11. SCALAR  pic_size, size2: integer;
  12.         i,j            : integer;
  13.         picture        : ARRAY [1..m_size],[1..m_size] OF integer;
  14.  
  15. VECTOR  color, buffer,b2: integer;
  16.         x,y             : integer;
  17.  
  18. BEGIN
  19.   (* init *)
  20.   pic_size := m_size;
  21.   (* create test pattern *)
  22.   for i:=1 to m_size do
  23.     for j:=1 to m_size do
  24.       picture[i,j] := 0
  25.     end;
  26.   end;
  27.   for i:=1 to m_size do picture[i,i] := i
  28.   end;
  29.  
  30.   load(color, picture);
  31.  
  32.   WHILE pic_size > 1 DO
  33.     size2 := pic_size div 2;
  34.     PARALLEL
  35.       y := dim1 mod pic_size;
  36.       x := dim2 mod pic_size;
  37.  
  38.       buffer := color;
  39.       IF x < size2 THEN propagate.up  ^size2 (buffer);
  40.                         IF y>=size2 THEN b2 := buffer END
  41.                    ELSE propagate.down^size2 (buffer);
  42.                         IF y< size2 THEN b2 := buffer END
  43.       END;
  44.  
  45.       buffer := color;
  46.       IF y < size2 THEN propagate.left ^size2 (buffer);
  47.                         IF x< size2 THEN b2 := buffer END
  48.                    ELSE propagate.right^size2 (buffer);
  49.                         IF x>=size2 THEN b2 := buffer END
  50.       END;
  51.  
  52.       color := b2;  (* copy new value *)
  53.     ENDPARALLEL;
  54.     pic_size := size2;
  55.  
  56.     store(color, picture);
  57.     (* print image *)
  58.     writeln;
  59.     for i:=1 to m_size do
  60.       for j:=1 to m_size do
  61.         writeint(picture[i,j],2)
  62.       end;
  63.       writeln;
  64.     end
  65.   END; (* while *)
  66.  
  67. END image_rotation.
  68.  
  69.